// HashFile.h

#include <unistd.h>
#include <sys/stat.h>

// 定义冲突因子
#define COLLISIONFACTOR 0.5

// 定义Hash文件头
struct HashFileHeader
{
    int sig; // Hash文件印鉴
    int reclen; // 记录长度
    int total_rec_num; // 总记录数
    int current_rec_num; // 当前记录数
};

// 定义冲突标记
struct CFTag
{
    char collision; // 冲突计数
    char free; // 空闲标志
};

// 创建Hash文件
int hashfile_creat(const char *filename, mode_t mode, int reclen, int total_rec_num);

// int hashfile_open(const char *filename,int flags);

// 打开Hash文件
int hashfile_open(const char *filename, int flags, mode_t mode);

// 关闭Hash文件
int hashfile_close(int fd);

// 读取Hash文件
int hashfile_read(int fd, int keyoffset, int keylen, void *buf);

// 写入Hash文件
int hashfile_write(int fd, int keyoffset, int keylen, void *buf);

// 删除Hash文件中的记录
int hashfile_delrec(int fd, int keyoffset, int keylen, void *buf);

// 查找Hash文件中的记录
int hashfile_findrec(int fd, int keyoffset, int keylen, void *buf);

// 保存记录到Hash文件
int hashfile_saverec(int fd, int keyoffset, int keylen, void *buf);

// 计算Hash值
int hash(int keyoffset, int keylen, void *buf, int total_rec_num);

// 检查Hash文件是否已满
int checkHashFileFull(int fd);

// 读取Hash文件头
int readHashFileHeader(int fd, struct HashFileHeader *hfh);